#include "stdio.h"
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    printf("main进程(%d)开始执行 \n", getpid());

    pid_t pid = fork();
    if (pid > 0) { // 父进程
        printf("父进程(%d)继续执行\n", getpid());

        // 等待子进程执行结束
        int result;
        waitpid(pid, &result, 0);
        printf("子进程执行结束，回到父进程执行，result = %d \n", result);

    } else if (pid == 0) { // 子进程
        printf("子进程(%d)开始执行\n", getpid());
        // 执行 命令程序： ping www.baidu.com -c 10
        char *path = "/bin/ping";
        char *argv[] = {path, "www.baidu.com", "-c", "10", NULL}; // 要求最后一位必须是NULL
        char *envp[] = {NULL}; // 要求最后一位必须是NULL  =》 使用默认的环境变量
        execve(path, argv, NULL); // 会先清空当前进程的内存，加载指定程序来执行
        printf("execve执行失败 \n");
        _exit(EXIT_FAILURE); // 失败退出（结束进程）
    } 

    printf("进程(%d)执行即将结束 \n", getpid());

    // return 0;
    exit(EXIT_SUCCESS); // 成功退出（结束进程）
}
